import 'package:freezed_annotation/freezed_annotation.dart';

part 'user_model.freezed.dart';
part 'user_model.g.dart';


// dart run build_runner build \
// --build-filter="lib/**/user_model.*.dart" \
// --delete-conflicting-outputs
//自动生成命令 part 'user_model.freezed.dart';part 'user_model.g.dart';

//简明对比
//@freezed（不可变）
//特性：所有字段为 final，不可修改；值相等（==/hashCode）、copyWith、toString 自动生成；支持 union/sealed（多构造）、when/map 模式匹配。
//用法：数据状态、接口模型、配置对象等“创建后不应被随意改动”的场景。
//好处：更安全、易推理、配合状态管理更稳。
//@unfreezed（可变）
//特性：字段可变（非 final）；仍会生成 ==/hashCode、copyWith、toString；保留 Freezed 的大部分能力，但对象可以直接赋值修改。
//用法：确实需要在对象上原地改字段（如表单草稿、编辑态对象）且你清楚这样做的影响。
//风险：可变对象更容易引入状态错乱，需自律使用。
//@freezed
//class User with _$User {
//const factory User({required String id, String? name}) = _User;
//factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
//}
//// 变更
//final u2 = u1.copyWith(name: '新名'); // u1 不变
//@unfreezed
//class UserModel with _$UserModel {
//factory UserModel({String? id, String? name}) = _UserModel;
//UserModel._(); // 想写实例方法时建议保留
//factory UserModel.fromJson(Map<String, dynamic> json) => _$UserModelFromJson(json);
//}
//// 变更
//user.name = '新名'; // 直接修改

@unfreezed
class UserModel with _$UserModel {
  const UserModel._();
  factory UserModel({
    @JsonKey(name: 'id') String? userId,
    String? account,
    String? email,
    String? nickName,
    String? icon,
    String? mobile,
    String? tenantId,
    String? region,
    int? status,
    String? level,
    String? roleId,
    String? token,
    String? createTime,
    String? updateTime,
  }) = _UserModel;

  factory UserModel.fromJson(Map<String, dynamic> json) =>
      _$UserModelFromJson(json);
}